package 简单.双指针;

import java.util.HashSet;
import java.util.Set;

/**
 * 给你一个字符串 word ，该字符串由数字和小写英文字母组成。
 * 请你用空格替换每个不是数字的字符。例如，"a123bc34d8ef34"
 * 将会变成 " 123  34 8  34" 。注意，剩下的这些整数为（相邻彼
 * 此至少有一个空格隔开）："123"、"34"、"8" 和 "34" 。
 * 返回对 word 完成替换后形成的 不同 整数的数目。
 * 只有当两个整数的 不含前导零 的十进制表示不同， 才认为这两个整数也不同。
 *  
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/number-of-different-integers-in-a-string
 */
public class 字符串中不同整数的数目_1805 {

    public static void main(String[] args) {

        System.out.println(numDifferentIntegers("0a0"));

    }

    /**
     * 双指针+哈希表
     *
     * @param word
     * @return
     */
    public static int numDifferentIntegers(String word) {
        Set<String> set = new HashSet<>();

        int left = 0;
        while (left < word.length()) {
            // 忽略字母
            while (left < word.length() && (!Character.isDigit(word.charAt(left)))) {
                left++;
            }
            if (left == word.length()) {
                return set.size();
            }
            int right = left + 1;
            while (right < word.length() && Character.isDigit(word.charAt(right))) {
                right++;
            }

            // 忽略前导零
            while (left < right - 1 && word.charAt(left) - '0' == 0) {
                left++;
            }
            set.add(word.substring(left, right));

            left = right + 1;
        }
        return set.size();
    }

}
